//
// Created by guasen on 2023/4/14.
//

#include <stdio.h>
#include <setjmp.h>

static jmp_buf buf;
int count = 0;
void second(void) {
    // 打印
    printf("second\n");
    count++;
    if(count == 5){
        longjmp(buf,1);             // 跳回setjmp的调用处 - 使得setjmp返回值为1
    }else{
        longjmp(buf,0);
    }
}

void first(void) {
    second();
    printf("first\n");          // 不可能执行到此行
}

int main() {
    int i;
    i = setjmp(buf);
    if ( i==0) {
        first();                // 进入此行前，setjmp返回0
    } else {                    // 当longjmp跳转回，setjmp返回1，因此进入此行
        printf("main\n");       // 打印
    }

    return 0;
}